3167c49687a1190002ef5a17ea3901a4464b4be5,server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java,VirtualNetworkApplianceManagerImpl,addVirtualMachineIntoNetwork,#Network#NicProfile#VirtualMachineProfile#DeployDestination#ReservationContext#Boolean#,1214

Before Change


        dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
        
        DataCenterVO dcVo = _dcDao.findById(router.getDataCenterIdToDeployIn());
        dhcpCommand.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
        
        cmds.addCommand("dhcp", dhcpCommand);

After Change


        List<DomainRouterVO> routers = _routerDao.listByNetworkAndState(network.getId(), State.Running);
        
        
        for (DomainRouterVO router : routers) {
            boolean sendPasswordAndVmData = true;
            boolean sendDnsDhcpData = true;
            _userVmDao.loadDetails((UserVmVO) profile.getVirtualMachine());
            
            //for basic zone: 
            //1) send vm data/password information only to the dhcp in the same pod
            //2) send dhcp/dns information to all routers in the cloudstack only when _dnsBasicZoneUpdates is set to "all" value
            DataCenter dc = dest.getDataCenter();
            if (dc.getNetworkType() == NetworkType.Basic) {
                Long podId = dest.getPod().getId();
                if (router.getPodIdToDeployIn().longValue() != podId.longValue()) {
                    sendPasswordAndVmData = false;
                    if (_dnsBasicZoneUpdates.equalsIgnoreCase("pod")) {
                        sendDnsDhcpData = false;
                    }
                }
            }

            Commands cmds = new Commands(OnError.Stop);

            String routerControlIpAddress = null;
            List<NicVO> nics = _nicDao.listByVmId(router.getId());
            for (NicVO n : nics) {
                NetworkVO nc = _networkDao.findById(n.getNetworkId());
                if (nc.getTrafficType() == TrafficType.Control) {
                    routerControlIpAddress = n.getIp4Address();
                }
            }

            if (sendDnsDhcpData) {
                DhcpEntryCommand dhcpCommand = new DhcpEntryCommand(nic.getMacAddress(), nic.getIp4Address(), profile.getVirtualMachine().getHostName());
                dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_IP, routerControlIpAddress);
                dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, router.getGuestIpAddress());
                dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
                
                dhcpCommand.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dc.getNetworkType().toString());
                
                cmds.addCommand("dhcp", dhcpCommand);
            }